使用 MC_DigitalCamSwitch_HighPrecision
这个例子 BasicMotion_DigitalCamSwitch_HighPrecision.project
位于安装目录中 CODESYS 下面 ..\CODESYS SoftMotion\Examples
。
此示例说明如何使用的输出 SMC_DigitalCamSwitch_HighPrecision
以高时间分辨率控制数字输出。以 Beckhoff 的 EL2258 和 EL2252 终端为例。
注意
示例中未包含 Beckhoff 的设备描述。您可以直接从供应商处下载这些文件并将其安装到设备存储库中。要运行该示例,你需要一个 EK1100 总线耦合器、一个 EL2258 终端和一个 EL2252 终端
重要
此示例是根据 EL2258 的 0017 修订版和 EL2252 的 0020 修订版开发和测试的。它仅作为一个例子。我们不保证正确性。源代码在使用前必须经过测试。如有必要,必须将其修改为终端的其他版本。
应用程序的结构
该应用程序包含一个 Main
程序, DigitalCamSwitch_EL2258
和 DigitalCamSwitch_EL2252
功能块,以及带有 EL2258 和 EL2252 输出端子的 EK1100 总线耦合器。
这个 DigitalCamSwitch_EL2258
和 DigitalCamSwitch_EL2252
功能块是示例的重要部分。他们展示了如何使用 Events
的输出 SMC_DigitalCamSwitch_HighPrecision
对数字输出进行编程。应将功能块理解为可以适应其他硬件的示例。
DigitalCamSwitch_EL2258
该功能块在上升沿处初始化
Enable
输入。STATE_INIT_0
和STATE_INIT_1
各州,OutputBufferReset
写入 EL2258 终端的信号然后aLastEventIds
数组已初始化。每个轨道上次处理的事件的 ID 保存在此数组中。这样可以防止事件多次传输到终端。初始化后 (
STATE_ACTIVE
),所有曲目依次处理,并对每条轨道执行以下逻辑:检查 EL2258 终端是否已经接受了最后的命令事件 (
ChannelsIn[channel].OutputOrderFeedback = ChannelsOut[channel].OutputOrderCounter
)。循环浏览赛道的所有事件。只有那些事件是
ToggleEventId
大于上次处理的 ID,将进一步考虑。(查询EventId_GreaterThan(event^.ToggleEventId, aLastEventIds[channel])
)参见 “活动顺序注意事项” 部分。
转换
Duration
将事件写入 EtherCAT 时间戳并相应地写入ChannelsOut[channel].OutputEventState
和ChannelsOut[channel].OutputEventTime
输出。在最多 5 个事件后中止处理。
如果发现至少一个事件,则通知终端存在新事件 (
ChannelsOut[channel].OutputOrderCounter := ChannelsOut[channel].OutputOrderCounter + 1
)。
关于活动顺序的备注
事件由返回 SMC_DigitalCamSwitch_HighPrecision
数组中每条轨道的功能块。这个 SwitchNumber
还有一个 ToggleEventId
将针对每个事件返回。这个 ToggleEventId
是独一无二的,每首曲目都是上升的。
有关更多信息,请参阅: SMC_CAMSWITCH 切换事件。
在示例中, aLastEventIds[trackNo]
数组存储每首曲目 ToggleEventId
最后一次传输到终端是在之前的函数块调用中。因为 ToggleEventIds
按升序排列,下次调用将确切知道哪些事件仍需要传输。
因为不知道在哪里
ToggleEventId
活动开始了,valid
标志保存在中EventId
ID 之外的数据类型。对于EventId_GreaterThan
对比,这个valid
相应地考虑了标志。这个
ToggleEventIds
有 32 位数据类型UDINT
因此,原则上可能会因运行时间长或开关频率高而溢出。然后,该值从 2^32-1 变回 0。比较函数EventId_GreaterThan
还考虑了 32 位溢出。
PDO 映射 EL2258
这个 ChannelsOut
和 ChannelsIn
的输出 DigitalCamSwitch_EL2258
功能块连接到 EL2258 终端的相应输入/输出通道。下图显示了频道 1 的映射。频道 2 类似;仅在访问时才有 ChannelsOut
和 ChannelsIn
索引是 2,而不是 1。

DigitalCamSwitch_EL2252
基本原理等同于 DigitalCamSwitch_EL2258
。区别在于信号的写入方式,因为 EL2252 终端只能对一个活动事件进行编程。
首先,函数块在中初始化
STATE_INIT
。然后
STATE_CHECK_FOR_EVENT
检查事件是否来自SMC_DigitalCamSwitch_HighPrecision
功能块处于待处理状态。如果事件可用,则必须在两个周期内对该事件进行编程:
输出和 EtherCAT 时间戳是在第一个周期中写入的。这个
Activate
输出设置为 0。在第二个周期中,
Activate
输出设置为 3 英寸STATE_ACTIVATE_EVENT_IN_EL2252
。这将在终端中激活该事件
在
STATE_WAIT_UNTIL_THE_INPUTS_MATCH_THE_OUTPUTS
,然后系统会等到事件被执行。来自的信号Feedback
终端的输入用于此目的。
PDO 映射 EL2252

Main
在主程序中,配置了四台交换机(每条轨道上两台)。这些曲目也有不同的开/关补偿OnComp
, OffComp
):

该程序包括必要的功能块调用,用于激活轴的预测并以 180°/s (*) 的速度持续移动,以及 SMC_DigitalCamSwitch_HighPrecision
, DigitalCamSwitch_EL2258
,以及 DigitalCamSwitch_EL2252
。在开始运动之前,现场总线必须完全通电。否则无法将事件传输到终端。
(*) 选择持续运动是为了使示例简单明了。但是, SMC_DigitalCamSwitch_HighPrecision
功能块适用于所有类型的动作。例如,它还提供加速阶段或凸轮期间的精确时间戳
调试
生成应用程序并将其下载到控制器。
启动应用程序。